package com.github.cakin.shiro.chapter23.web.shiro.filter;

import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import org.apache.shiro.web.util.WebUtils;
import org.springframework.util.StringUtils;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * @className: ServerFormAuthenticationFilter
 * @description: 重写认证拦截器
 * @date: 2020/6/1
 * @author: cakin
 */
public class ServerFormAuthenticationFilter extends FormAuthenticationFilter {
    /**
     * 功能描述：因为是多项目登录，如果是从其他应用中重定向过来的，
     * 首先检查 Session 中是否有 “authc.fallbackUrl” 属性，如果有就认为它是默认的重定向地址；
     * 否则使用 Server 自己的 successUrl 作为登录成功后重定向到的地址。
     *
     * @param request  请求
     * @param response 响应
     * @throws Exception
     * @author cakin
     * @date 2020/6/1
     */
    protected void issueSuccessRedirect( ServletRequest request, ServletResponse response ) throws Exception {
        String fallbackUrl = (String) getSubject(request, response)
                .getSession().getAttribute("authc.fallbackUrl");
        if (StringUtils.isEmpty(fallbackUrl)) {
            fallbackUrl = getSuccessUrl();
        }
        WebUtils.redirectToSavedRequest(request, response, fallbackUrl);
    }
}
